/*
 * Copyright (C) 2015 Altera Corporation <www.altera.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
#include "socfpga_arria10.dtsi"

/ {
	model = "Altera SOCFPGA Arria 10";
	compatible = "altr,socfpga-arria10", "altr,socfpga";

	aliases {
		ethernet0 = &gmac0;
		serial0 = &uart1;
	};

	chosen {
		bootargs = "earlyprintk";
		stdout-path = "serial0:115200n8";
	};

	memory@0 {
		name = "memory";
		device_type = "memory";
		reg = <0x0 0x40000000>; /* 1GB */
	};

	a10leds {
		compatible = "gpio-leds";

		a10sr_led0 {
			label = "a10sr-led0";
			gpios = <&a10sr_gpio 0 1>;
		};

		a10sr_led1 {
			label = "a10sr-led1";
			gpios = <&a10sr_gpio 1 1>;
		};

		a10sr_led2 {
			label = "a10sr-led2";
			gpios = <&a10sr_gpio 2 1>;
		};

		a10sr_led3 {
			label = "a10sr-led3";
			gpios = <&a10sr_gpio 3 1>;
		};
	};

	soc {
		clkmgr@ffd04000 {
			clocks {
				osc1 {
					clock-frequency = <25000000>;
				};
			};
		};
	};
};

&gmac0 {
	phy-mode = "rgmii";
	phy-addr = <0xffffffff>; /* probe for phy addr */

	/*
	 * These skews assume the user's FPGA design is adding 600ps of delay
	 * for TX_CLK on Arria 10.
	 *
	 * All skews are offset since hardware skew values for the ksz9031
	 * range from a negative skew to a positive skew.
	 * See the micrel-ksz90x1.txt Documentation file for details.
	 */
	txd0-skew-ps = <0>; /* -420ps */
	txd1-skew-ps = <0>; /* -420ps */
	txd2-skew-ps = <0>; /* -420ps */
	txd3-skew-ps = <0>; /* -420ps */
	rxd0-skew-ps = <420>; /* 0ps */
	rxd1-skew-ps = <420>; /* 0ps */
	rxd2-skew-ps = <420>; /* 0ps */
	rxd3-skew-ps = <420>; /* 0ps */
	txen-skew-ps = <0>; /* -420ps */
	txc-skew-ps = <1860>; /* 960ps */
	rxdv-skew-ps = <420>; /* 0ps */
	rxc-skew-ps = <1680>; /* 780ps */
	max-frame-size = <3800>;
	status = "okay";
};

&gpio1 {
	status = "okay";
};

&spi1 {
	status = "okay";

	resource-manager@0 {
		compatible = "altr,a10sr";
		reg = <0>;
		spi-max-frequency = <100000>;
		/* low-level active IRQ at GPIO1_5 */
		interrupt-parent = <&portb>;
		interrupts = <5 IRQ_TYPE_LEVEL_LOW>;
		interrupt-controller;
		#interrupt-cells = <2>;

		a10sr_gpio: gpio-controller {
			compatible = "altr,a10sr-gpio";
			gpio-controller;
			#gpio-cells = <2>;
		};

		a10sr_rst: reset-controller {
			compatible = "altr,a10sr-reset";
			#reset-cells = <1>;
		};
	};
};

&i2c1 {
	status = "okay";

	/*
	 * adjust the falling times to decrease the i2c frequency to 50Khz
	 * because the LCD module does not work at the standard 100Khz
	 */
	clock-frequency = <100000>;
	i2c-sda-falling-time-ns = <6000>;
	i2c-scl-falling-time-ns = <6000>;

	eeprom@51 {
		compatible = "atmel,24c32";
		reg = <0x51>;
		pagesize = <32>;
	};

	rtc@68 {
		compatible = "dallas,ds1339";
		reg = <0x68>;
	};

	ltc@5c {
		compatible = "ltc2977";
		reg = <0x5c>;
	};
};

&uart1 {
	status = "okay";
};

&usb0 {
	status = "okay";
	disable-over-current;
};

&watchdog1 {
	status = "okay";
};
